home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_400 / 424_02 / ED-157 / get_colbyt.c < prev    next >
C/C++ Source or Header  |  1993-09-10  |  2KB  |  53 lines

  1. /*
  2.  * Copyright (C) 1992 by Rush Record (rhr@clio.rice.edu)
  3.  * 
  4.  * This file is part of ED.
  5.  * 
  6.  * ED is free software; you can redistribute it and/or modify it under the terms
  7.  * of the GNU General Public License as published by the Free Software Foundation.
  8.  * 
  9.  * ED is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  10.  * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  11.  * PARTICULAR PURPOSE.  See the GNU General Public License for more details.
  12.  * 
  13.  * You should have received a copy of the GNU General Public License along with ED
  14.  * (see the file COPYING).  If not, write to the Free Software Foundation, 675
  15.  * Mass Ave, Cambridge, MA 02139, USA.
  16.  */
  17. #include "opsys.h"
  18.  
  19. #include "memory.h"
  20. #include "rec.h"
  21. #include "window.h"
  22. #include "ed_dec.h"
  23.  
  24. /******************************************************************************\
  25. |Routine: get_colbyt
  26. |Callby: copier insert killer
  27. |Purpose: Returns the byte offset in a record of the byte that corresponds to the given column number.
  28. |         Converts all TABs in the record to spaces, and makes sure the record is long enough to include the given column.
  29. |Arguments:
  30. |    r is the record being analyzed.
  31. |    column is the column number.
  32. \******************************************************************************/
  33. Int get_colbyt(r,column)
  34. rec_ptr r;
  35. Int column;
  36. {
  37.     register Int l;
  38.     Char *buf;
  39.  
  40.     l = express(r->length,r->data,TAB_STRING[CUR_TAB_SETUP],TAB_LENGTH[CUR_TAB_SETUP],&buf,0,0);
  41.     while(l < column)    /* this is dangerous */
  42.         buf[l++] = ' ';
  43.     if(r->recflags & 1)
  44.         ifree(r->data);    /* replace the record with the expressed record */
  45.     r->data = (Char *)imalloc(l + 1);
  46.     r->recflags = 1;    /* mark it as freeable */
  47.     memcpy(r->data,buf,l);
  48.     r->data[l] = '\0';
  49.     r->length = l;
  50.     return(column - 1);    /* return trapped byte offset */
  51. }
  52.  
  53.